﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 选择排序
{
    class Program
    {
        static void Main(string[] args)
        {
            // 首先通过n - 1次比较，从n个数中找出最小的，将它与第一个数交换，这是第一趟先择排序，进行完之后，最小的数安放在了第一个数的位置
            // 再通过n-2次比较，从剩余的n-1个数当中最小的，将他与第二个数交换，这是第二趟选择排序
            // ...
            // 重复上述过程，共经过n-1次趟排序，这时，排序结束
            // 每一趟都会选择出一个最小值来跟前面相应的元素做交换（相应的元素：第几趟就是第几个元素）
            /* 初始：
             * 49 38 65 97 76 12 27
             * 第一趟
             * 12 38 65 97 76 49 27
             * 第二趟
             * 12 27 65 97 76 49 38
             * 第三趟
             * 12 27 38 97 76 49 65
             * 第四趟
             * 12 27 38 49 76 97 65
             * 第五趟
             * 12 27 38 49 65 97 76
             * 第六趟
             * 12 27 38 49 65 76 97
             */

            int[] intArray = { 49, 38, 65, 97, 76, 12, 27 };
            int min = intArray[0];  // 用来记录最小值
            int index = 0;          // 用来记录最小值的下标
            // 控制趟数
            for (int i = 0; i < intArray.Length - 1; i++)
            {
                // 每一趟比较之前都让最小值等于剩下数字的第一个
                min = intArray[i];
                index = i;
                // 由于每一趟比较完毕之后都能把一个最小值放到数组的前面，
                // 并且又假设最小值是剩下值的第一个，所以比较的时候从剩下数当中的第二个开始
                for (int j = i + 1; j < intArray.Length; j++)
                {
                    if (intArray[j] < min)
                    {
                        // 得到最小值
                        min = intArray[j];
                        index = j;
                    }
                }
                // 交换值
                intArray[index] = intArray[i];
                intArray[i] = min;
            }

            foreach (var item in intArray)
            {
                Console.WriteLine(item);
            }
        }
    }
}
